home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 25 / CU Amiga Magazine's Super CD-ROM 25 (1998)(EMAP Images)(GB)(Track 1 of 2)[!][issue 1998-08].iso / CUCD / Programming / QuakeTools / docs / ripped / unqcc099.txt < prev   
Text File  |  1998-04-29  |  8KB  |  212 lines

  1. ------------------------------------------------------------------------------------
  2. I changed the version to 099 (i figured this was ok since it wouldn't run before ;-)
  3. ------------------------------------------------------------------------------------
  4.  
  5. Title    : unqcc
  6. Filename : unqcc99.zip
  7. Version  : 0.99 (working beta)
  8. Date     : 1:16 AM 7/25/97
  9. Author(s): Christian Knauer , David Lenk (did not actually change any major stuff but made it run)
  10. Email    : cnknauer@cip.informatik.uni-erlangen.de
  11. Credits  : id Software for creating Quake and
  12.            all the QuakeC gurus out there for improving it
  13.  
  14.  
  15. Type of Modification
  16. --------------------
  17. Modification to id's QuakeC compiler (qcc)  
  18.  
  19. Deathmatch    : -
  20. Single Player : -
  21.  
  22. Quake C       : - 
  23. Sound         : -
  24. MDL           : -
  25.  
  26. Description of the Modification
  27. -------------------------------
  28. This patch lets you decompile a progs.dat file back to native QuakeC.
  29. It's similar to Armin Rigo's deacc, but it creates ''pure'' QuakeC code,
  30. so you can immediatly recompile the source with qcc.
  31. (well - at least in theory, see below)
  32.  
  33. The command ''qcc -dec'' will decompile the progs.dat file from the
  34. current directory. Alternatively you can specify a file to decompile,
  35. e.g. ''qcc -dec ../myprogs.dat''.
  36.  
  37. WARNING: The decompilation process will APPEND it's output to existing
  38. qc files. So you should decompile in an empty directory.
  39.  
  40. Most of the time you will be able to compile the created source immediately.
  41. (e.g. with id's original V1.06 source)
  42. Unfortunately unqcc has some shortcomings, so that you sometimes will have
  43. to modify the source by hand before it compiles cleanly (this happens e.g.
  44. with Steven Polge's ReaperBot 0.81).
  45.  
  46. Decompilation currently does not include type synthesis, so the decompiler
  47. uses a very cheap trick to determine the return type of a function. Sometimes
  48. this may fail. In that case the default type ''float'' is used (which is
  49. the right choice for most of the time) and the function as well as all of its
  50. prototypes is marked with a comment of the form
  51.         ''/* ERROR: Could not determine return type */''.
  52. Use your brain to determine the correct return type and fix it by hand.
  53.  
  54. The same remark applies to entity function fields. unqcc always uses the type
  55. .void() for them, so you probably will have to fix it (e.g. ReaperBot's
  56. .th_weight field). (The .th_pain field is the exception to the rule here.)
  57.  
  58.  
  59. Global variables are only initialized if their name starts with uppercase
  60. letters. Otherwise their (potential) initial value is enclosed in a comment.
  61. This works for all vital system constant such as TRUE, FL_xx, etc.
  62. but e.g. the chase cam mod uses some lowercase constants. Again: check the
  63. source and fix by hand.
  64.  
  65. By the way: The ''error'' in line 153 of misc.qc that you'll get during
  66. recompilation is NOT caused by a unqcc bug. Check the origial 1.06 source
  67. and you will see, who messed things up...   (check out end of text for example) // added by dave
  68.  
  69. Other comments of the form 
  70.         ''/* ERROR: ... */''
  71. may show up in the generated source and can usually be ignored. Don't ask
  72. me where they come from. (I suspect that they are caused by qcc bugs, but
  73. who knows ...)
  74.  
  75. If you found a progs.dat that can not be decompiled, please drop me an
  76. email. (Tell me where it can be found, which compiler you used, etc.
  77. Please do NOT send the progs.dat file!)
  78.  
  79. How to Install the Modification
  80. -------------------------------
  81. First, get the source code to id's QuakeC compiler qcc, e.g. from
  82. ftp.cdrom.com. (I've not tested this with modified compilers, like
  83. fastqcc from Jonathan Roy - mail me if you succeed ...)
  84.  
  85. Create a subdirectory and install the qcc source in it. Next, unzip
  86. the file unqcc099.zip to this directory. This will replace the original //edited by dave
  87. files ''makefile'' and ''qcc.c'' with new versions and add the file
  88. ''unqcc.c''. Now compile by issuing a ''make'' command.
  89.  
  90. This procedure has been tested under Linux and under MSDOS with DJGPPv2.
  91. Please do not bomb me with emails like ''What is a make command?'',
  92. ''What is DJGPP?'' and the like. If you don't know what i'm talking about
  93. then wait until some brave soul will provide a precompiled binary.
  94. (That won't be me!)
  95.  
  96. Technical Details
  97. -----------------
  98. Most of the code is derived from id Software's source code to the qcc
  99. compiler. The decompilation is just a form of symbolic evaluation of
  100. Quake's assembler code. Check the source code for details.
  101. Since the return type is not always exactly known and since qcc always
  102. uses a vector store opcode to initialize function parameters i had to
  103. use some ''dirty tricks'' in some places. Check the source (and laugh
  104. yourself to death ...).
  105.  
  106. Famous last words: Don't expect too much! This is a terrible weekend-hack.
  107. and it defintely has some bugs and flaws. Nevertheless, I hope it will be 
  108. useful for you ..
  109.  
  110. The files in this archive are:
  111.  
  112.                 makefile
  113.                 qcc.c
  114.                 unqcc.c
  115.  
  116. Author Information
  117. ------------------
  118. CS Student - check
  119.         http://wwwcip.informatik.uni-erlangen.de/~cnknauer
  120. for details.
  121.  
  122. Distribution Permission
  123. -----------------------
  124. Do whatever you like with it. If you add a major improvement (like
  125. correct type synthesis and the like), please drop me an email.
  126.  
  127. Availability
  128. ------------
  129. This modification is available from the following places:
  130.         ftp.cdrom.com
  131.  
  132. Version Information
  133. -------------------
  134.         0.99     First Release - probably the last one, too. I'm
  135.                  currently working on my master's thesis, so time
  136.                  is precious right now.
  137.  
  138. Disclaimer and Trademarks
  139. -------------------------
  140. The author takes no responsiblity for misuse of    this program. 
  141. He is not responsible for any damage caused by it.
  142.  
  143. Quake TM (c)1996 id Software, Inc.  All Rights Reserved.
  144. All trademarks are the property of their respective companies.
  145.  
  146. ---------------------------------------
  147.  
  148. <-- This section added by ~SamWise~ (Dave) -->
  149.  
  150. ---------------------------------------
  151.  
  152. ---------------
  153. Compiling UNQCC
  154. ---------------
  155.  
  156. I represent alot of confused people whom after downloading Unqcc098 were dissapointed when it 
  157.  
  158. presented us with gobs of errors.  it seems that the creator did not bother to include the 
  159.  
  160. needed files (cmdlib.c, pr_lex.c, pr_comp.h, and pr_comp.c)  he left it up to us to get them.  
  161.  
  162. Finding the files was not hard but when We recieved the source kit, the files were incompatible..
  163.  
  164. Finnaly I decided to read through the qcc.c file provided and extract the decompiling code, 
  165.  
  166. (i don't even know C).  when the code was inserted into a qcc.c file that already compiled 
  167.  
  168. perfectly the code worked great.  (ie.. thats how I am uploading this now).  PLEASE DO NOT 
  169.  
  170. GET ME WRONG, I am not trying to put down Christian Knauer (the author) I am mearly stating 
  171.  
  172. that probably on a whim he uploaded the wrong source files (sorry Christian).
  173.  
  174.  
  175. -------------------------
  176. Problems with decompiling
  177. -------------------------
  178.  
  179. The error with line 153 of misc.qc,
  180.  
  181. ID's original Code (works great: no visible errors in code)
  182.  
  183. {
  184.     
  185.     precache_model ("progs/lavaball.mdl");
  186.     self.classname = "fireball";
  187.     self.nextthink = time + (random() * 5);
  188.     self.think = fire_fly;
  189.     if (!self.speed)
  190.         self.speed == 1000;
  191. };
  192.  
  193. unqcc's generated code (doesn't work:  this error is not ID's fault)
  194.  
  195. {
  196.    precache_model ("progs/lavaball.mdl"); // no errors
  197.    self.classname = "fireball"; // no errors
  198.    self.nextthink = (time + (random () * MOVETYPE_FLY));  // MOVETYPE_FLY this name changes randomly durring decompilation it was TE_LIGHTNING twice before it turned into this.
  199.    self.think = fire_fly; // no errors here
  200.    if ( !self.speed ) {  // whoa where did the next line go (well that solve this problem) 
  201. }
  202.  
  203. I will provide a bianary or qcc.exe (32bit DOS), I do not take any responsability for any 
  204. damage caused by the use of this executable, I give no express or implied warantees about 
  205. this program.  I can only assure you that this program works great on my p166 win95 system.
  206.  
  207. Also included in the ZIP file will be all files needed to compile this program.  (you need your
  208. own Compiler)  I use djgpp v2 it works great for me, you can get it at ftp.simtel.net/pub/gnu/djgpp
  209. or visit www.delorie.com for more info.
  210.  
  211.  
  212.